package com.bb.flow.config.node;

import com.bb.flow.config.AbstractConfigNode;

import java.util.HashMap;
import java.util.Map;

/**
 * @author bigbeard
 * 容器内部接点
 */
public class ContainerInnerNode {

    private final Map<String, AbstractConfigNode> flowNodes = new HashMap<>();

    private int orderIndex;

    /**
     * 节点顺序
     *
     * @return 节点顺序
     */
    public int getOrderIndex() {
        return orderIndex;
    }

    /**
     * 设置节点顺序
     *
     * @param orderIndex 顺序值
     * @return 当前对象
     */
    public ContainerInnerNode setOrderIndex(int orderIndex) {
        this.orderIndex = orderIndex;
        return this;
    }

    /**
     * 添加节点,如果节点重名(相同的节点NodeKey)则覆盖原来的节点
     *
     * @param node 节点
     */
    public void addNode(AbstractConfigNode node) {
        flowNodes.remove(node.getNodeKey());
        flowNodes.put(node.getNodeKey(), node);
    }

    /**
     * 移除节点
     *
     * @param nodeKey 被移除的节点名称
     */
    public void removeNode(String nodeKey) {
        flowNodes.remove(nodeKey);
    }

    /**
     * 获取当前所有节点内容
     *
     * @return 节点内容
     */
    public Map<String, AbstractConfigNode> getFlowNodes() {
        return new HashMap<>(this.flowNodes);
    }
}
